package com.hellodev.lightme.view;
import java.util.Timer;
import java.util.TimerTask;
import android.content.Context;
import android.graphics.PixelFormat;
import android.os.Handler;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.WindowManager.LayoutParams;
import com.hellodev.lightme.FlashApp;
import com.hellodev.lightme.R;
public class GuideViewManager implements OnClickListener , OnTouchListener{
private WindowManager wm;
private LayoutParams winParams;
private Context appContext;
private Timer timer = new Timer();
private TimerTask autoCloseTask;
private View mGuideView;
public final static int AUTO_CLOSE_NOT_NEED = 0;
private final static int AUTO_CLOSE_MSG = 1;
private boolean closeAble;
private Handler handler = new Handler() {
public void handleMessage(android.os.Message msg) {
if( msg.what == AUTO_CLOSE_MSG) {
close();
}
};
};
public GuideViewManager(WindowManager wm, int windowType) {
appContext = FlashApp.getContext();
this.wm = wm;
winParams = new LayoutParams();
winParams.type = windowType;
winParams.format = PixelFormat.RGBA_8888;
winParams.flags = LayoutParams.FLAG_NOT_TOUCH_MODAL
| LayoutParams.FLAG_NOT_FOCUSABLE
| LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH;
winParams.windowAnimations = R.style.info_popu_anim;
}
public void add(View guideView, int gravity, int posX, int posY, boolean closeAble ) {
add(guideView, gravity, posX, posY, 0, closeAble);
}
public void add(View guideView, int gravity, int posX, int posY, long autoCloseTimeDelay, boolean closeAble) {
mGuideView = guideView;
mGuideView.measure(android.view.ViewGroup.LayoutParams.WRAP_CONTENT,
android.view.ViewGroup.LayoutParams.WRAP_CONTENT);
winParams.width = mGuideView.getMeasuredWidth();
winParams.height = mGuideView.getMeasuredHeight();
winParams.gravity = gravity;
winParams.x = posX;
winParams.y = posY;
wm.addView(guideView, winParams);
guideView.setOnTouchListener(this);
guideView.setOnClickListener(this);
if(autoCloseTimeDelay > 0) {
autoCloseTask = new TimerTask() {
@Override
public void run() {
handler.sendEmptyMessage(AUTO_CLOSE_MSG);
autoCloseTask = null;
}
};
timer.schedule(autoCloseTask, autoCloseTimeDelay);
}
}
public void close() {
if(autoCloseTask != null) {
autoCloseTask.cancel();
}
if(mGuideView != null) {
wm.removeView(mGuideView);
mGuideView = null;
}
}
@Override
public void onClick(View view) {
close();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
boolean isHandled = false;
if(event.getAction() == MotionEvent.ACTION_OUTSIDE) {
close();
isHandled = true;
}
return isHandled;
}
}